基础用法
- 创建信号
- 订阅信号
- 发送信号
|
|
在创建 RACSignal 的时候,
|
|
方法传入的 block 会返回一个 RACDisposable
对象。
将以上代码中的 return nil;
替换成如下代码
|
|
这个时候在 [subscriber sendComplete]
的时候会执行创建 RACDisposable
传入的 block
如何主动取消订阅
|
|
|
|
timer
|
|
delay
|
|
timeout
|
|
retry
重试, 遇到 error 就会重新执行创建信号中的block,直到成功. 也可以传入 retry 的次数,如果超过这个次数还是 error 则返回 error
对 RACSignal 的操作
|
|
map 映射
map
|
|
flattenMap
把源信号的内容映射成一个新的信号,信号可以是任意类型。
|
|
flattenmap 和 map 的区别
- FlatternMap中的Block返回信号。
- Map中的Block返回对象。
- 开发中,如果信号发出的值不是信号,映射一般使用Map
- 开发中,如果信号发出的值是信号,映射一般使用flatternMap。
mapReplace
传入一个值 x , 将每个信号的值都改为 x
|
|
filter 过滤
filter
传入一个 block , 当这个 block 返回 YES 的时候才能响应
|
|
ignore
传入一个参数 x 忽略 value == x 的信号
|
|
distinctUntilChanged
如果这次受到的信号
value
跟上次的信号value
相同, 这次信号被忽略。
|
|
startWith
传入一个参数 x , 订阅的时候首先收到 value = x 的信号。 类似于在创建 RACSignal 的第一行 [subscriber sendNext:x];
|
|
take
传入一个数组 n, 表明只响应前 n 个信号
|
|
takeLast
传入一个数值 n, 取最后 n 个信号
只有收到了complete才知道结果。
takeUntilBlock
一直响应,直到传入的 block 第一次返回 YES
|
|
takeWhileBlock
一直响应,直到传入的 block 第一次返回 NO
|
|
skip
传入一个数字 n 表明忽略前面第 n 个信号, 第 n + 1 个信号开始响应。
|
|
skipUntilBlock
一直忽略信号, 直到传入的 block 第一次返回 YES
|
|
skipWhileBlock
一直忽略信号, 直到传入的 block 第一次返回 NO
|
|
scanWithStart:reduce
解决类似数组求和的问题
|
|
组合
contact
把signalA拼接到signalB后,signalA发送完成,signalB才会被激活。
|
|
then
类似 contact 将两个 signal 链接
- 只有等第一个 signal 介绍之后才会激活第二个 signal。
- 在第一个 signal 结束之前 signal2 的信号会被忽略。
- 第一个 signal 只关注
complete
sendNext 被忽略
区别: contact signal1 的 sendNext 会响应, 而 then 的不会。
|
|
merge
将两个 signal 合并为一个 signal 原先的信号发出 都会响应, 没有前后顺序。
|
|
zip
将两个signal 合并之后的 next 合并为一个 tuple 返回回来。 一一对应关系,一个信号的 next 等到第二个信号有 next 之后 包装成 signal 返回。
返回的 zip 第一个值就是第一个信号的next。
combineLatest
将多个信号合并起来,并且拿到各个信号的最新的值,必须每个合并的signal至少都有过一次sendNext,才会触发合并的信号。
zip 和 combineLatest 的区别
|
|